-
-
Notifications
You must be signed in to change notification settings - Fork 111
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(web): load .kmx keyboard from blob 🎼 #12823
Conversation
User Test ResultsTest specification and instructions User tests are not required |
} | ||
}); | ||
} catch (e: any) { | ||
console.log('got execption in CoreFactory.createCoreProcessor', e); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
console.log('got execption in CoreFactory.createCoreProcessor', e); | |
console.log('got exception in CoreFactory.createCoreProcessor', e); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we need to ensure that exceptions here aren't masked. Console log is not available in many contexts e.g. System keyboard. Console.error is a start but not enough maybe?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What do you suggest?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there a reason the exception needs to be masked here? Could it just change to propagate?
3c32fda
to
11cfb2e
Compare
This change adds the web side of loading a .kmx keyboard from a blob. It also replaces the `CoreProcessor` class with `CoreFactory` that allows to directly use the methods defined in WASM without having to add another wrapper for each method.
11cfb2e
to
a072171
Compare
non-zero value is an error). | ||
|
||
## Specification | ||
|
||
--> | ||
// keep in sync with web/src/engine/core-processor/src/core-factory.ts |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mention emscripten-core/emscripten#18585 here too?
} | ||
}); | ||
} catch (e: any) { | ||
console.log('got execption in CoreFactory.createCoreProcessor', e); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there a reason the exception needs to be masked here? Could it just change to propagate?
it('can initialize without errors', async function () { | ||
const kp = new CoreProcessor(); | ||
assert.isTrue(await kp.init(coreurl)); | ||
assert.isNotNull(await CoreFactory.createCoreProcessor(coreurl)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
here for example would fail if there's an err.
Several tests failed because of async issues, so I went through where we should wait and didn't.
keymanweb.activatingUI(true); | ||
|
||
if(this.KeyboardSelector.value != '-') { | ||
var i=this.KeyboardSelector.selectedIndex; | ||
var t=this.KeyboardSelector.options[i].value.split(':'); | ||
keymanweb.setActiveKeyboard(t[0],t[1]); | ||
await keymanweb.setActiveKeyboard(t[0],t[1]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Using the review for me learning. Just did some very quick reading of promises. So as I understand setActiveKeyboard is a promise function which will either resolve or reject. However this code doesn't take into account whether it resolved or rejected, is it just simply waiting to it has run (async) before continuing... regardless of resolved or rejected.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
However this code doesn't take into account whether it resolved or rejected, is it just simply waiting to it has run (async) before continuing... regardless of resolved or rejected.
If rejected, an exception is thrown. Generally setActiveKeyboard should never reject.
@@ -191,11 +191,11 @@ export default class KeymanEngine extends KeymanEngineBase<BrowserConfiguration, | |||
// globe key - are accessible. | |||
// | |||
// The `super` call above initializes `keyboardRequisitioner`, as needed here. | |||
this.keyboardRequisitioner.cloudQueryEngine.once('unboundregister', () => { | |||
this.keyboardRequisitioner.cloudQueryEngine.once('unboundregister', async () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
EventEmitter
, which is what will trigger this function, does not do await
/ async
stuff. If you add code later that motivates it, okay... but as is, you're gaining nothing by the async
/ await
change here.
This change adds the web side of loading a .kmx keyboard from a blob. It also replaces the
CoreProcessor
class withCoreFactory
that allows to directly use the methods defined in WASM without having to add another wrapper for each method.Note that this is only the first step that implements loading the kmx keyboard, but we don't anything with it yet.
Part-of: #11293
@keymanapp-test-bot skip